﻿var userId = 'aldo.sandoval@jaguarlabs.com';

$(function () {
    // Load the grid after the page render event.
    // Avoiding an error, executing something when the grid has not been rendered.
    setTimeout(LoadGridSettings, 1000);
    setTimeout(LoadOptions, 1000);

    // Add project fetures.
    $('#addNewProject').click(function() {
        $('#InsertProjectContent').removeClass('hide');
        $('#taskTables').css('display', 'none');
    });
    
    // Show filter features.
    $('#filterTask').click(function () {
        alert('Filtering...');
    });
    
    $('#btnInsertProject').click(function () {
        $.ajaxPost(
               "CreateProject",
                   $('#projectNameToInsert').val(),
               InsertProjectResult);
    });

    // Show add task window.
    $('#addNewTask').click(function (e) {
        // Showing the right button
        $('#btnUpdateTaks').addClass('hide');
        $('#btnInsertTaks').removeClass('hide');

        $('#taskDetails').removeClass('hide');
        $('#taskTables').css('display', 'none');        
    });

    // Show selected users.
    $('#showUsers').click(function() {
        $('#taskUsers').css('display', $('#taskUsers').css('display') === 'inline' ? 'none' : 'inline');
    });
    
    // Notification options.
    for (var i = 0; i < 10; i++) {
        $('#taskNotificationDays').append(new Option(i + ' dias', i));
        $('#taskNotificationHours').append(new Option(i + ' hrs', i));
        $('#taskNotificationMins').append(new Option(i + ' mins', i));
    }

    $('#btnUpdateTaks').click(function () {        
        var message = ValidateInputs();
        
        if (!message) {
            // Insert task.
            $.ajaxPost(
                "UpdateTask",
                    $('#txtId').val() +
                    '/' + $('#taskName').val() +
                    '/' + $('#taskDescription').val() +
                    '/' + $('#taskEndDate').val() + ' ' + $('#taskHour').val().replace(':', '_') +
                    '/' + $('#taskPriority').val() +
                    '/' + $('#taskEndDate').val() + // TODO: convert notification.
                    '/' + $('#taskProject').val() +
                    '/' + $('#taskProgress').val() +
                    '/' + ($('#taskShowInCalendar').is(':checked')) +
                    '/' + $('#userOptionsTxt').val(),
                UpdateTaskResult);
        }
    });

    $('#btnInsertTaks').click(function() {
        var message = ValidateInputs();

        if (!message) {
            // Insert task.
            $.ajaxPost(
                "InsertTask",
                    $('#taskName').val() +
                    '/' + $('#taskDescription').val() +
                    '/' + $('#taskEndDate').val() + ' ' + $('#taskHour').val().replace(':', '_') +
                    '/' + $('#taskPriority').val() +
                    '/' + $('#taskEndDate').val() + // TODO: convert notification.
                    '/' + $('#taskProject').val() +
                    '/' + $('#taskProgress').val() +
                    '/' + ($('#taskShowInCalendar').is(':checked')) +
                    '/' + $('#userOptionsTxt').val(),
                InserTaskResult);
        } else {
            alert(message);
        }
    });

    // Edit option.
    $('#optionEdit').click(function () {
        // Showing the right button
        $('#btnUpdateTaks').removeClass('hide');
        $('#btnInsertTaks').addClass('hide');

        // Get task.
        $.ajaxPost("GetTaskDetails", $('#taskOptions').parent().children()[0].value, SetTask);
    });
    
    // Edit option.
    $('#optionDelete').click(function () {
        if (confirm('¿Estás seguro de querer borrar esta tarea?')) {
            // Delete task.
            $.ajaxPost("DeleteTask", $(this).parent().parent().children('input').val(), ReloadThisPage);
        }
    });

    $('#taskTables').mouseleave(function() {
        $('#taskOptions').css('display', 'none');
    });

    // Attachment
    $("#taskAttachment").change(function () {
        var fileName = $(this).val();
        $("#fileshow").val(fileName);

    });
});

// Reload the page after some actions.
function ReloadThisPage(result) {
    if (result.ErrorMessage) {
        // Error.
        alert(result.ErrorMessage);
    } else {
        // Success.
        alert('La teara a sido borrada correctamente.');
        location.reload();
    }
}

// validation for inputs.
function ValidateInputs() {
    var message = '';
    if (!$('#taskName').val()) {
        message = 'Favor de ingresar el nombre.';
    }

    if (!$('#taskDescription').val()) {
        message = 'Favor de ingresar una descripción.';
    }

    if (!$('#taskDescription').val()) {
        message = 'Favor de ingresar una descripción.';
    }

    if (!$('#userOptionsTxt').val()) {
        message = 'Favor de seleccionar al menos un usuario.';
    }

    if (!$('#taskEndDate').val() || $('#taskEndDate').val().indexOf('/') >= 0) {
        message = 'Favor de ingresar una fecha válida..';
    }

    return message;
}

function SetTask(result) {
    if (result) {
        var start = parseInt(result.EndDate.replace(/\/Date\((.*?)[+-]\d+\)\//i, "$1"), 10),
            date = new Date(start),
            hour = date.getHours() + ':' + date.getMinutes(),
            endDate = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + (date.getDate() - 1);

        $('#txtId').val(result.Id);
        $('#taskName').val(result.Name);
        $('#taskDescription').val(result.Description);
        $('#taskEndDate').val(endDate);
        $('#taskHour').val(hour);
        //$('#').val(result.Name); TODO: Notification
        $('#taskProject').val(result.ProjectId);
        $('#taskPriority').val(result.PriorityId);
        $('#taskProgress').val(result.Progress);
        
        // Users.
        var users = '';
        $.each(result.Users, function (index, value) {
            if (value) {
                users += value + ';';
                $('.userOption').each(function(i, c) {
                    if (c.value == value) {
                        c.checked = true;
                    }
                });
            }
        });
        $('#userOptionsTxt').val(users);
        
        // Show in calendar.
        $('#taskShowInCalendar').each(function(i, c) {
            c.checked = result.ShowInCalendar;
        });;

        // Show edit table.
        $('#taskDetails').removeClass('hide');
        $('#taskTables').css('display', 'none');
    }    
}

// Load options.
function LoadOptions() {
    // Get priorities.
    $.ajaxPost("GetPriorities", '', SetPriorities);
    
    // Get users.
    $.ajaxPost("GetUsers", '', SetUsers);

    // Get projects.
    $.ajaxPost("GetProjects", '', SetProjects);
}

// Set priorities.
function SetPriorities(result) {
    result.forEach(function(option) {
        $('#taskPriority').append(new Option(option.Name, option.Id));
    });
}

// Set users.
function SetUsers(result) {
    result.forEach(function (option) {
        $('#taskUsers').append('<label class="userOptions"><input type="checkbox" class="userOption" value="' + option.Email + '"/>' + option.Name + '</label><br />');
    });
}

// Set projects.
function SetProjects(result) {
    result.forEach(function (option) {
        $('#taskProject').append(new Option(option.Name, option.Id));
    }); 
}

// Load grid settings.
function LoadGridSettings() {
    $.ajaxPost(
        "GetUserTasks",
        userId,
        UpdateTable);
}

function UpdateTaskResult(result) {
    if (result.ErrorMessage) {
        // Error.
        alert(result.ErrorMessage);
    } else {
        // Success.
        alert('La teara a sido actualizada correctamente.');
        $('#taskDetails').addClass('hide');
    }
}

// Insert task success.
function InserTaskResult(result) {
    if (result.ErrorMessage) {
        // Error.
        alert(result.ErrorMessage);
    } else {
        // Success.
        alert('La teara a sido insertada correctamente Id: ' + result.TaskId);
        $('#taskDetails').addClass('hide');
    }
}

function InsertProjectResult(result) {
    if (result.ErrorMessage) {
        // Error.
        alert(result.ErrorMessage);
    } else {
        // Success.
        alert('El projecto a sido insertado correctamente');
        $('#InsertProjectContent').addClass('hide');
    }
}

// Update table.
function UpdateTable(result) {
    $('#taskTables').css('display', 'table');
    if ($('.taskRow').length > 0) {
        $('.taskRow').clear();
    }

    // Set the HTML markup    
    result.forEach(function (task) {
        var subTasksContent = '';
        task.SubTasks.forEach(function (subTask) {
            subTasksContent += GetTaskHTMLMarkup(subTask, '');
        });
        $('#taskTables').append(GetTaskHTMLMarkup(task, subTasksContent));
    });

    // Show task options.
    $('.taskSelector').mouseover(function () {
        $('#optionCreateSubTask').show();
        $('#taskOptions').appendTo($(this));
        $('#taskOptions').css('display', 'block');

        if ($(this).hasClass('removeCreateSubTask')) {
            $('#optionCreateSubTask').hide();
        }
    });
    
    // Users option change.
    $('.userOptions').click(function () {
        var newUserText = '';
        $('.userOption').each(function() {
            if ($(this).is(':checked')) {
                newUserText += this.value + ';';
            }
        });
        $('#userOptionsTxt').val(newUserText);
    });
}

// Get the task HTML markup.
function GetTaskHTMLMarkup(task, subTaskHtmlContent) {
    return '<div class="taskRow">' +
        '   <div class="' + (task.ParentId > 0 ? 'subTaskRowName">' : 'taskRowName">') + task.Name + '</div>' +
        '   <div class="taskSelector' + (task.ParentId > 0 ? ' removeCreateSubTask' : '') + '">' +
        '       <input type="hidden" value="' + task.Id + '"/>^</div>' +
        '   </div>' +
        subTaskHtmlContent +
        (task.ParentId == 0 ? '<div style="height: 3px"></div>' : '');
}